#!/bin/bash

# 定义帮助函数
show_usage() {
    echo "用法: $0 [选项] <搜索目录>"
    echo "选项:"
    echo "  -n <数量>    指定要显示的文件数量 (默认: 100)"
    echo "  -t <类型>    指定文件类型 (例如: txt,log,*)"
    echo "  -h          显示帮助信息"
    exit 1
}

# 默认值设置
count=100
file_type="*"
search_dir=""

# 解析命令行参数
while getopts "n:t:h" opt; do
    case $opt in
        n) count="$OPTARG";;
        t) file_type="$OPTARG";;
        h) show_usage;;
        \?) echo "无效选项: -$OPTARG" >&2; show_usage;;
    esac
done

# 移除已处理的选项参数
shift $((OPTIND-1))

# 检查是否提供了搜索目录
if [ $# -eq 0 ]; then
    echo "错误: 未指定搜索目录"
    show_usage
fi

search_dir="$1"

# 检查目录是否存在
if [ ! -d "$search_dir" ]; then
    echo "错误: 目录 '$search_dir' 不存在"
    exit 1
fi

# 如果文件类型包含多个类型，需要构建查找表达式
if [[ $file_type == *","* ]]; then
    # 将逗号分隔的文件类型转换为 -o -name "*.type" 格式
    type_expr=""
    IFS=',' read -ra types <<< "$file_type"
    for t in "${types[@]}"; do
        if [ -z "$type_expr" ]; then
            type_expr="-name \"*.$t\""
        else
            type_expr="$type_expr -o -name \"*.$t\""
        fi
    done
    find_cmd="find \"$search_dir\" -type f \( $type_expr \) -printf '%T+ %p\n'"
else
    # 单个文件类型的情况
    find_cmd="find \"$search_dir\" -type f -name \"*.$file_type\" -printf '%T+ %p\n'"
fi

# 执行查找命令并显示结果
echo "搜索中..."
eval $find_cmd | sort -r | head -n "$count" | while read -r line; do
    timestamp=$(echo "$line" | cut -d' ' -f1)
    filepath=$(echo "$line" | cut -d' ' -f2-)
    # 将时间戳格式化为更易读的形式
    formatted_time=$(date -d "${timestamp:0:19}" "+%Y-%m-%d %H:%M:%S")
    echo "[$formatted_time] $filepath"
done

echo "完成! 已显示最新的 $count 个文件。"